using System;

namespace CUtil
{

	
#region Definition of the standard windows messages that might be useful.
	
		public enum WindowsMessages
		{
			TTM_ACTIVATE        =   (WindowsMessages.WM_USER + 1),
			TTM_SETDELAYTIME    =   (WindowsMessages.WM_USER + 3),
			TTM_ADDTOOLA        =   (WindowsMessages.WM_USER + 4),
			TTM_ADDTOOLW        =   (WindowsMessages.WM_USER + 50),
			TTM_DELTOOLA        =   (WindowsMessages.WM_USER + 5),
			TTM_DELTOOLW        =   (WindowsMessages.WM_USER + 51),
			TTM_NEWTOOLRECTA    =   (WindowsMessages.WM_USER + 6),
			TTM_NEWTOOLRECTW    =   (WindowsMessages.WM_USER + 52),
			TTM_RELAYEVENT      =   (WindowsMessages.WM_USER + 7),
			TTM_GETTOOLINFOA    =   (WindowsMessages.WM_USER + 8),
			TTM_GETTOOLINFOW    =   (WindowsMessages.WM_USER + 53),
			TTM_SETTOOLINFOA    =   (WindowsMessages.WM_USER + 9),
			TTM_SETTOOLINFOW    =   (WindowsMessages.WM_USER + 54),
			TTM_HITTESTA        =   (WindowsMessages.WM_USER +10),
			TTM_HITTESTW        =   (WindowsMessages.WM_USER +55),
			TTM_GETTEXTA        =   (WindowsMessages.WM_USER +11),
			TTM_GETTEXTW        =   (WindowsMessages.WM_USER +56),
			TTM_UPDATETIPTEXTA  =   (WindowsMessages.WM_USER +12),
			TTM_UPDATETIPTEXTW  =   (WindowsMessages.WM_USER +57),
			TTM_GETTOOLCOUNT    =   (WindowsMessages.WM_USER +13),
			TTM_ENUMTOOLSA      =   (WindowsMessages.WM_USER +14),
			TTM_ENUMTOOLSW      =   (WindowsMessages.WM_USER +58),
			TTM_GETCURRENTTOOLA =   (WindowsMessages.WM_USER + 15),
			TTM_GETCURRENTTOOLW =   (WindowsMessages.WM_USER + 59),
			TTM_WINDOWFROMPOINT =   (WindowsMessages.WM_USER + 16),
			TTM_TRACKACTIVATE   =   (WindowsMessages.WM_USER + 17), // wParam = TRUE/FALSE start end  lparam = LPTOOLINFO
			TTM_TRACKPOSITION   =   (WindowsMessages.WM_USER + 18),  // lParam = dwPos
			TTM_SETTIPBKCOLOR   =   (WindowsMessages.WM_USER + 19),
			TTM_SETTIPTEXTCOLOR =   (WindowsMessages.WM_USER + 20),
			TTM_GETDELAYTIME    =   (WindowsMessages.WM_USER + 21),
			TTM_GETTIPBKCOLOR   =   (WindowsMessages.WM_USER + 22),
			TTM_GETTIPTEXTCOLOR =   (WindowsMessages.WM_USER + 23),
			TTM_SETMAXTIPWIDTH  =   (WindowsMessages.WM_USER + 24),
			TTM_GETMAXTIPWIDTH  =   (WindowsMessages.WM_USER + 25),
			TTM_SETMARGIN       =   (WindowsMessages.WM_USER + 26), // lParam = lprc
			TTM_GETMARGIN       =   (WindowsMessages.WM_USER + 27),  // lParam = lprc
			TTM_POP             =   (WindowsMessages.WM_USER + 28),
			TTM_UPDATE          =   (WindowsMessages.WM_USER + 29),
			TTM_GETBUBBLESIZE   =   (WindowsMessages.WM_USER + 30),
			TTM_ADJUSTRECT      =   (WindowsMessages.WM_USER + 31),
			TTM_SETTITLEA       =   (WindowsMessages.WM_USER + 32),  // wParam = TTI_*, lParam = char* szTitle
			TTM_SETTITLEW       =   (WindowsMessages.WM_USER + 33),  // wParam = TTI_*, lParam = wchar* szTitle
			TTM_POPUP           =   (WindowsMessages.WM_USER + 34),
			TTM_GETTITLE        =   (WindowsMessages.WM_USER + 35), // wParam = 0, lParam = TTGETTITLE*
			WM_NULL				= 0x0000,
		
			WM_CREATE			= 0x0001,
			WM_DESTROY			= 0x0002,
		
			WM_MOVE				= 0x0003,
		
			WM_SIZE				= 0x0005,
		
			WM_ACTIVATE			= 0x0006,

			WM_SETFOCUS			= 0x0007,

			/// <summary>
			/// This message is sent to a window immediately before it loses the keyboard focus.
			/// </summary>
			WM_KILLFOCUS		= 0x0008,

			/// <summary>
			/// </summary>
			WM_SETREDRAW		= 0x000B,

			/// <summary>
			/// 
			/// </summary>
			WM_PARENTNOTIFY		= 0x0210,

			/// <summary>
			/// This message is sent when the system or another application makes a request to paint a portion of the window.
			/// </summary>
			WM_PAINT			= 0x000F,

			/// <summary>
			/// This message is sent as a signal that a window or an application should terminate.
			/// </summary>
			WM_CLOSE			= 0x0010,

			/// <summary>
			/// This message indicates a request to terminate an application and is generated when the application calls 
			/// the PostQuitMessage function. It causes the GetMessage function to return zero. 
			/// </summary>
			WM_QUIT				= 0x0012,

			/// <summary>
			/// This message is sent when the window background must be erased (for example, when a window is resized). 
			/// The message is sent to prepare an invalidated portion of a window for painting. 
			/// </summary>
			WM_ERASEBKGND		= 0x0014,

			/// <summary>
			/// This message is sent to all top-level windows when a change is made to a system color setting. 
			/// </summary>
			WM_SYSCOLORCHANGE	= 0x0015,

			/// <summary>
			/// This message is sent to a window when the window is about to be hidden or shown.
			/// </summary>
			WM_SHOWWINDOW		= 0x0018,

			/// <summary>
			/// Use of this message is deprecated. Use WM_SETTINGCHANGE instead.
			/// </summary>
			WM_WININICHANGE		= 0x001A,

			/// <summary>
			/// The system sends this message to all top-level windows when the SystemParametersInfo function changes a 
			/// system-wide setting or when policy settings have changed. Applications should send this message to all 
			/// top-level windows when they make changes to system parameters. 
			/// This message cannot be sent directly to a window. To send this message to all top-level windows, use 
			/// the SendMessageTimeout function with the hwnd parameter set to HWND_BROADCAST. 
			/// </summary>
			WM_SETTINGCHANGE	= WM_WININICHANGE,

			/// <summary>
			/// This message is sent to all top-level windows whenever the user changes device-mode settings. 
			/// </summary>
			WM_DEVMODECHANGE	= 0x001B,

			/// <summary>
			/// The WM_ACTIVATEAPP message is sent when a window belonging to a different application than the active window 
			/// is about to be activated. The message is sent to the application whose window is being activated and to the 
			/// application whose window is being deactivated. 
			/// </summary>
			WM_ACTIVATEAPP      = 0x001C,

			/// <summary>
			/// The WM_MOUSEACTIVATE message is sent when the cursor is in an inactive window and the user presses a mouse button.
			/// </summary>
			WM_MOUSEACTIVATE	= 0x0021,

			/// <summary>
			/// The WM_DRAWITEM message is sent to the owner window of an owner-drawn button, combo box, list box, or menu 
			/// when a visual aspect of the button, combo box, list box, or menu has changed.
			/// </summary>
			WM_DRAWITEM			= 0x002B,

			/// <summary>
			/// The WM_MEASUREITEM message is sent to the owner window of an owner-drawn button, combo box, list box, or menu 
			/// when a visual aspect of the button, combo box, list box, or menu has changed.
			/// </summary>
			WM_MEASUREITEM		= 0x002C,

			/// <summary>
			/// The WM_NOTIFY message is sent by a common control to its parent window when an event has occurred or the 
			/// control requires some information. 
			/// </summary>
			WM_NOTIFY			= 0x004E,

			/// <summary>
			/// This message is sent to a window when the cursor moves, or when a mouse button is pressed or released.
			/// If the mouse is not captured, the message is sent to the window beneath the cursor. Otherwise, the 
			/// message is sent to the window that has captured the mouse. 
			/// </summary>
			WM_NCHITTEST		= 0x0084,

			/// <summary>
			/// The WM_NCPAINT message is sent to a window when its frame must be painted.
			/// </summary>
			WM_NCPAINT			= 0x0085,

			/// <summary>
			/// The WM_SYNCPAINT message is used to synchronize painting while avoiding linking independent GUI threads.
			/// </summary>
			WM_SYNCPAINT		= 0x0088,

			/// <summary>
			/// The WM_NCLBUTTONDOWN message is posted when the user presses the left mouse button while the cursor is within 
			/// the nonclient area of a window. This message is posted to the window that contains the cursor. If a window has 
			/// captured the mouse, this message is not posted.
			/// </summary>
			WM_NCLBUTTONDOWN	= 0x00A1,

			/// <summary>
			/// The WM_NCLBUTTONDOWN message is posted when the user presses 
			/// the right mouse button while the cursor is within the nonclient 
			/// area of a window. 
			/// This message is posted to the window that contains the cursor. 
			/// If a window has captured the mouse, this message is not posted. 
			/// </summary>
			WM_NCRBUTTONDOWN	= 0x00A4,

			/// <summary>
			/// The WM_NCRBUTTONUP message is posted when the user releases the 
			/// right mouse button while the cursor is within the nonclient area of a window. 
			/// This message is posted to the window that contains the cursor. 
			/// If a window has captured the mouse, this message is not posted. 
			/// see winuser.h file for values.
			/// </summary>
			WM_NCRBUTTONUP			= 0x00A5,
		
			/// <summary>
			/// The WM_NCLBUTTONDBLCLK message is posted when the user double-clicks the left 
			/// mouse button while the cursor is within the nonclient area of a window. 
			/// This message is posted to the window that contains the cursor. 
			/// If a window has captured the mouse, this message is not posted. 
			/// see winuser.h file for values.
			/// </summary>
			WM_NCLBUTTONDBLCLK		= 0x00A3,
		
			/// <summary>
			/// The WM_KEYUP message is posted to the window with the keyboard focus when a nonsystem key is released.
			/// </summary>
			WM_KEYUP			= 0x0101,

			/// <summary>
			/// 
			/// </summary>
			WM_COMMAND			= 0x0111,
		
			/// <summary>
			/// A window receives this message when the user chooses a command from the window menu (formerly known as the 
			/// system or control menu) or when the user chooses the maximize button, minimize button, restore button, or close button.
			/// </summary>
			WM_SYSCOMMAND		= 0x0112,
		
			/// <summary>
			/// The WM_TIMER message is posted to the installing thread's message queue when a timer expires. The 
			/// message is posted by the GetMessage or PeekMessage function.
			/// </summary>
			WM_TIMER			= 0x0113,
		
			/// <summary>
			/// The WM_HSCROLL message is sent to a window when a scroll event occurs in the window's standard horizontal scroll bar. 
			/// This message is also sent to the owner of a horizontal scroll bar control when a scroll event occurs in the control.
			/// </summary>
			WM_HSCROLL			= 0x0114,
		
			/// <summary>
			/// The WM_VSCROLL message is sent to a window when a scroll event occurs in the window's standard vertical scroll bar. 
			/// This message is also sent to the owner of a vertical scroll bar control when a scroll event occurs in the control.
			/// </summary>
			WM_VSCROLL			= 0x0115,

			/// <summary>
			/// Here starts the section with the mouse related windows messages.
			/// </summary>
			WM_MOUSEFIRST		= 0x0200,
		
			/// <summary>
			/// The WM_MOUSEMOVE message is posted to a window when the cursor moves. If the mouse is not captured, the message is 
			/// posted to the window that contains the cursor. Otherwise, the message is posted to the window that has captured the mouse. 
			/// </summary>
			WM_MOUSEMOVE		= WM_MOUSEFIRST,
		
			/// <summary>...</summary>
			WM_LBUTTONDOWN		= WM_MOUSEFIRST + 0x01,
			/// <summary>...</summary>
			WM_LBUTTONUP		= WM_MOUSEFIRST + 0x02,
			/// <summary>...</summary>
			WM_LBUTTONDBLCLK	= WM_MOUSEFIRST + 0x03,
			/// <summary>...</summary>
			WM_RBUTTONDOWN		= WM_MOUSEFIRST + 0x04,
			/// <summary>...</summary>
			WM_RBUTTONUP		= WM_MOUSEFIRST + 0x05,
			/// <summary>...</summary>
			WM_RBUTTONDBLCLK	= WM_MOUSEFIRST + 0x06,
			/// <summary>...</summary>
			WM_MBUTTONDOWN		= WM_MOUSEFIRST + 0x07,
			/// <summary>...</summary>
			WM_MBUTTONUP		= WM_MOUSEFIRST + 0x08,
			/// <summary>...</summary>
			WM_MBUTTONDBLCLK	= WM_MOUSEFIRST + 0x09,
			/// <summary>...</summary>
			WM_MOUSEWHEEL		= WM_MOUSEFIRST + 0x0A,
			/// <summary>...</summary>
			WM_XBUTTONDOWN		= WM_MOUSEFIRST + 0x0B,
			/// <summary>...</summary>
			WM_XBUTTONUP		= WM_MOUSEFIRST + 0x0C,
			/// <summary>...</summary>
			WM_XBUTTONDBLCLK	= WM_MOUSEFIRST + 0x0D,
			/// <summary>...</summary>
			WM_MOUSEHOVER		= WM_MOUSEFIRST + 0xA1,
			/// <summary>...</summary>
			WM_MOUSELEAVE		= WM_MOUSEFIRST + 0xA3,
			/// <summary>...</summary>
			WM_MOUSELAST		= WM_MOUSELEAVE,

			/// <summary>
			/// The WM_PRINT message is sent to a window to request that it draw itself in the specified device context, most commonly 
			/// in a printer device context.
			/// </summary>
			WM_PRINT			= 0x0317,
		
			/// <summary>
			/// The WM_PRINTCLIENT message is sent to a window to request that it draw its client area in the specified device 
			/// context, most commonly in a printer device context.
			/// </summary>
			WM_PRINTCLIENT		= 0x0318,

			/// <summary>
			/// The WM_USER message starts the area for user-defined messages
			/// </summary>
			WM_USER             = 0x0400,

			// Here starts the section with the browser folder view related windows messages.
			/// <summary></summary>
			BFFM_SETSELECTION = (WM_USER + 103),
			/// <summary></summary>
			BFFM_SETSTATUSTEXT	= (WM_USER + 104),

			// Here starts the section with toolbar related windows messages.
			/// <summary></summary>
			TB_GETHOTITEM		= (WM_USER + 71),
			/// <summary></summary>
			TB_ISBUTTONPRESSED	= (WM_USER + 11),

			/// <summary>
			/// Here starts the section with the list view related windows messages.
			/// </summary>
			LVM_FIRST 						= 0x1000,
			/// <summary><A HREF="ms-help://MS.VSCC/MS.MSDNVS/shellcc/platform/CommCtls/Common/Common.htm">see Platform SDK</A></summary>
			LVM_SETITEMCOUNT 				= (LVM_FIRST + 47),
			/// <summary><A HREF="ms-help://MS.VSCC/MS.MSDNVS/shellcc/platform/CommCtls/Common/Common.htm">see Platform SDK</A></summary>
			LVM_GETITEMSTATE 				= (LVM_FIRST + 44),
			/// <summary><A HREF="ms-help://MS.VSCC/MS.MSDNVS/shellcc/platform/CommCtls/Common/Common.htm">see Platform SDK</A></summary>
			LVM_GETITEMPOSITION 			= (LVM_FIRST + 16),
			/// <summary><A HREF="ms-help://MS.VSCC/MS.MSDNVS/shellcc/platform/CommCtls/Common/Common.htm">see Platform SDK</A></summary>
			LVM_GETITEMRECT 				= (LVM_FIRST + 14),
			/// <summary><A HREF="ms-help://MS.VSCC/MS.MSDNVS/shellcc/platform/CommCtls/Common/Common.htm">see Platform SDK</A></summary>
			LVM_GETSTRINGWIDTH 				= (LVM_FIRST + 87),
			/// <summary><A HREF="ms-help://MS.VSCC/MS.MSDNVS/shellcc/platform/CommCtls/Common/Common.htm">see Platform SDK</A></summary>
			LVM_EDITLABEL 					= (LVM_FIRST + 118),
			/// <summary><A HREF="ms-help://MS.VSCC/MS.MSDNVS/shellcc/platform/CommCtls/Common/Common.htm">see Platform SDK</A></summary>
			LVM_SETEXTENDEDLISTVIEWSTYLE 	= (LVM_FIRST + 54),
			/// <summary><A HREF="ms-help://MS.VSCC/MS.MSDNVS/shellcc/platform/CommCtls/Common/Common.htm">see Platform SDK</A></summary>
			LVM_GETEXTENDEDLISTVIEWSTYLE 	= (LVM_FIRST + 55),
			/// <summary><A HREF="ms-help://MS.VSCC/MS.MSDNVS/shellcc/platform/CommCtls/Common/Common.htm">see Platform SDK</A></summary>
			LVM_INSERTITEMW 				= (LVM_FIRST + 77),
			/// <summary><A HREF="ms-help://MS.VSCC/MS.MSDNVS/shellcc/platform/CommCtls/Common/Common.htm">see Platform SDK</A></summary>
			LVM_SETITEMSTATE 				= (LVM_FIRST + 43),
			/// <summary> TreeView messages ! see Platform SDK</summary>
			TV_FIRST             =   0x1100,		      
			/// <summary><A HREF="ms-help://MS.VSCC/MS.MSDNVS/shellcc/platform/CommCtls/Common/Common.htm">see Platform SDK</A></summary>
			TVM_INSERTITEMA      =  (TV_FIRST + 0),
			/// <summary><A HREF="ms-help://MS.VSCC/MS.MSDNVS/shellcc/platform/CommCtls/Common/Common.htm">see Platform SDK</A></summary>
			TVM_INSERTITEMW      =  (TV_FIRST + 50),
			/// <summary><A HREF="ms-help://MS.VSCC/MS.MSDNVS/shellcc/platform/CommCtls/Common/Common.htm">see Platform SDK</A></summary>
			TVM_DELETEITEM       =  (TV_FIRST + 1),
			/// <summary><A HREF="ms-help://MS.VSCC/MS.MSDNVS/shellcc/platform/CommCtls/Common/Common.htm">see Platform SDK</A></summary>
			TVM_EXPAND           =  (TV_FIRST + 2),
			/// <summary><A HREF="ms-help://MS.VSCC/MS.MSDNVS/shellcc/platform/CommCtls/Common/Common.htm">see Platform SDK</A></summary>
			TVM_GETITEMRECT      =  (TV_FIRST + 4),
			/// <summary><A HREF="ms-help://MS.VSCC/MS.MSDNVS/shellcc/platform/CommCtls/Common/Common.htm">see Platform SDK</A></summary>
			TVM_GETCOUNT         =  (TV_FIRST + 5),
			/// <summary><A HREF="ms-help://MS.VSCC/MS.MSDNVS/shellcc/platform/CommCtls/Common/Common.htm">see Platform SDK</A></summary>
			TVM_GETINDENT        =  (TV_FIRST + 6),
			/// <summary><A HREF="ms-help://MS.VSCC/MS.MSDNVS/shellcc/platform/CommCtls/Common/Common.htm">see Platform SDK</A></summary>
			TVM_SETINDENT        =  (TV_FIRST + 7),
			/// <summary><A HREF="ms-help://MS.VSCC/MS.MSDNVS/shellcc/platform/CommCtls/Common/Common.htm">see Platform SDK</A></summary>
			TVM_GETIMAGELIST     =  (TV_FIRST + 8),
			/// <summary><A HREF="ms-help://MS.VSCC/MS.MSDNVS/shellcc/platform/CommCtls/Common/Common.htm">see Platform SDK</A></summary>
			TVM_SETIMAGELIST     =  (TV_FIRST + 9),
			/// <summary><A HREF="ms-help://MS.VSCC/MS.MSDNVS/shellcc/platform/CommCtls/Common/Common.htm">see Platform SDK</A></summary>
			TVM_GETNEXTITEM      =  (TV_FIRST + 10),
			/// <summary><A HREF="ms-help://MS.VSCC/MS.MSDNVS/shellcc/platform/CommCtls/Common/Common.htm">see Platform SDK</A></summary>
			TVM_SELECTITEM       =  (TV_FIRST + 11),
			/// <summary><A HREF="ms-help://MS.VSCC/MS.MSDNVS/shellcc/platform/CommCtls/Common/Common.htm">see Platform SDK</A></summary>
			TVM_GETITEMA         =  (TV_FIRST + 12),
			/// <summary><A HREF="ms-help://MS.VSCC/MS.MSDNVS/shellcc/platform/CommCtls/Common/Common.htm">see Platform SDK</A></summary>
			TVM_GETITEMW         =  (TV_FIRST + 62),
			/// <summary><A HREF="ms-help://MS.VSCC/MS.MSDNVS/shellcc/platform/CommCtls/Common/Common.htm">see Platform SDK</A></summary>
			TVM_SETITEMA         =  (TV_FIRST + 13),
			/// <summary><A HREF="ms-help://MS.VSCC/MS.MSDNVS/shellcc/platform/CommCtls/Common/Common.htm">see Platform SDK</A></summary>
			TVM_SETITEMW         =  (TV_FIRST + 63),
			/// <summary><A HREF="ms-help://MS.VSCC/MS.MSDNVS/shellcc/platform/CommCtls/Common/Common.htm">see Platform SDK</A></summary>
			TVM_EDITLABELA       =  (TV_FIRST + 14),
			/// <summary><A HREF="ms-help://MS.VSCC/MS.MSDNVS/shellcc/platform/CommCtls/Common/Common.htm">see Platform SDK</A></summary>
			TVM_EDITLABELW       =  (TV_FIRST + 65),
			/// <summary><A HREF="ms-help://MS.VSCC/MS.MSDNVS/shellcc/platform/CommCtls/Common/Common.htm">see Platform SDK</A></summary>
			TVM_GETEDITCONTROL   =  (TV_FIRST + 15),
			/// <summary><A HREF="ms-help://MS.VSCC/MS.MSDNVS/shellcc/platform/CommCtls/Common/Common.htm">see Platform SDK</A></summary>
			TVM_GETVISIBLECOUNT  =  (TV_FIRST + 16),
			/// <summary><A HREF="ms-help://MS.VSCC/MS.MSDNVS/shellcc/platform/CommCtls/Common/Common.htm">see Platform SDK</A></summary>
			TVM_HITTEST          =  (TV_FIRST + 17)
		}
#endregion

#region Return codes for the mouse activate message.
		/// <summary>
		/// The return value of a mouse activation message specifies whether the window should be activated and 
		/// whether the identifier of the mouse message should be discarded. It must be one of the following values.
		/// </summary>
		public class MouseActivateMessageReturnCode
		{
			/// <summary>
			/// Activates the window, and does not discard the mouse message.
			/// </summary>
			public const int MA_ACTIVATE         = 1;

			/// <summary>
			/// Activates the window, and discards the mouse message.
			/// </summary>
			public const int MA_ACTIVATEANDEAT   = 2;

			/// <summary>
			/// Does not activate the window, and does not discard the mouse message.
			/// </summary>
			public const int MA_NOACTIVATE       = 3;

			/// <summary>
			/// Does not activate the window, but discards the mouse message.
			/// </summary>
			public const int MA_NOACTIVATEANDEAT = 4;
		}
#endregion

#region Definition for the possible windows styles from the Win32-API
		/// <summary>
		/// The standard windows styles as defined in the Microsoft Windows Platform SDK.
		/// </summary>
		public class WindowStyle
		{
			/// <summary>
			/// 
			/// </summary>
			public const int WS_OVERLAPPED       = 0x00000000;
			/// <summary>
			/// 
			/// </summary>
			public const int WS_POPUP            = unchecked((int) 0x80000000);

			/// <summary>
			/// Creates a child window. Cannot be used with the WS_POPUP style.
			/// </summary>
			public const int WS_CHILD            = 0x40000000;
			/// <summary>
			/// 
			/// </summary>
			public const int WS_MINIMIZE         = 0x20000000;
			/// <summary>
			/// 
			/// </summary>
			public const int WS_VISIBLE          = 0x10000000;

			/// <summary>
			/// Creates a window that is initially disabled.
			/// </summary>
			public const int WS_DISABLED         = 0x08000000;

			/// <summary>
			/// Clips child windows relative to each other; that is, when a particular child window receives a paint message, 
			/// the WS_CLIPSIBLINGS style clips all other overlapped child windows out of the region of the child window to 
			/// be updated. (If WS_CLIPSIBLINGS is not given and child windows overlap, when you draw within the client area 
			/// of a child window, it is possible to draw within the client area of a neighboring child window.)
			/// For use with the WS_CHILD style only.
			/// </summary>
			public const int WS_CLIPSIBLINGS     = 0x04000000;

			/// <summary>
			/// Excludes the area occupied by child windows when you draw within the parent window. 
			/// Used when you create the parent window.
			/// </summary>
			public const int WS_CLIPCHILDREN     = 0x02000000;

			/// <summary>
			/// Creates a window of maximum size.
			/// </summary>
			public const int WS_MAXIMIZE         = 0x01000000;

			/// <summary>
			/// Creates a window that has a border.
			/// </summary>
			public const int WS_BORDER           = 0x00800000;

			/// <summary>
			/// Creates a window with a double border but no title.
			/// </summary>
			public const int WS_DLGFRAME         = 0x00400000;

			/// <summary>
			/// 
			/// </summary>
			public const int WS_VSCROLL          = 0x00200000;

			/// <summary>
			/// Creates a window that has a horizontal scroll bar.
			/// </summary>
			public const int WS_HSCROLL          = 0x00100000;

			/// <summary></summary>
			public const int WS_SYSMENU          = 0x00080000;

			/// <summary></summary>
			public const int WS_THICKFRAME       = 0x00040000;
			/// <summary></summary>
			public const int WS_GROUP            = 0x00020000;
			/// <summary></summary>
			public const int WS_TABSTOP          = 0x00010000;

			/// <summary></summary>
			public const int WS_MINIMIZEBOX      = 0x00020000;

			/// <summary>
			/// Creates a window that has a Maximize button.
			/// </summary>
			public const int WS_MAXIMIZEBOX      = 0x00010000;

			/// <summary></summary>
			public const int WS_TILED            = WS_OVERLAPPED;
			/// <summary></summary>
			public const int WS_ICONIC           = WS_MINIMIZE;
			/// <summary></summary>
			public const int WS_SIZEBOX          = WS_THICKFRAME;
			/// <summary></summary>
			public const int WS_TILEDWINDOW      = WS_OVERLAPPEDWINDOW;
			/// <summary></summary>
			public const int WS_CHILDWINDOW      = WS_CHILD;

			/// <summary>
			/// Creates a window that has a title bar (implies the WS_BORDER style).
			/// Cannot be used with the WS_DLGFRAME style.
			/// </summary>
			public const int WS_CAPTION          = (WS_BORDER | WS_DLGFRAME);

			/// <summary></summary>
			public const int WS_OVERLAPPEDWINDOW = (WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME | WS_MINIMIZEBOX | WS_MAXIMIZEBOX);

			/// <summary></summary>
			public const int WS_POPUPWINDOW      = (WS_POPUP | WS_BORDER | WS_SYSMENU);
		}
#endregion

#region Definition for the possible extended windows styles from the Win32-API
		/// <summary>
		/// The extended windows styles as defined in the Microsoft Windows Platform SDK.</summary>
		/// <remarks>
		/// Note that not all of the values defined in this class are available on every
		/// Windows platform. Some only apply to Win2K or WinXP.</remarks>
		public class WindowStyleEx
		{
			/// <summary></summary>
			public const int WS_EX_DLGMODALFRAME     = 0x00000001;
			/// <summary></summary>
			public const int WS_EX_NOPARENTNOTIFY    = 0x00000004;
			/// <summary></summary>
			public const int WS_EX_TOPMOST           = 0x00000008;
			/// <summary></summary>
			public const int WS_EX_ACCEPTFILES       = 0x00000010;
			/// <summary></summary>
			public const int WS_EX_TRANSPARENT       = 0x00000020;
			/// <summary></summary>
			public const int WS_EX_MDICHILD          = 0x00000040;
			/// <summary></summary>
			public const int WS_EX_TOOLWINDOW        = 0x00000080;
			/// <summary></summary>
			public const int WS_EX_WINDOWEDGE        = 0x00000100;
			/// <summary></summary>
			public const int WS_EX_CLIENTEDGE        = 0x00000200;
			/// <summary></summary>
			public const int WS_EX_CONTEXTHELP       = 0x00000400;
			/// <summary></summary>
			public const int WS_EX_RIGHT             = 0x00001000;
			/// <summary></summary>
			public const int WS_EX_LEFT              = 0x00000000;
			/// <summary></summary>
			public const int WS_EX_RTLREADING        = 0x00002000;
			/// <summary></summary>
			public const int WS_EX_LTRREADING        = 0x00000000;
			/// <summary></summary>
			public const int WS_EX_LEFTSCROLLBAR     = 0x00004000;
			/// <summary></summary>
			public const int WS_EX_RIGHTSCROLLBAR    = 0x00000000;
			/// <summary></summary>
			public const int WS_EX_CONTROLPARENT     = 0x00010000;
			/// <summary></summary>
			public const int WS_EX_STATICEDGE        = 0x00020000;
			/// <summary></summary>
			public const int WS_EX_APPWINDOW         = 0x00040000;
			/// <summary></summary>
			public const int WS_EX_LAYERED           = 0x00080000;
			/// <summary></summary>
			public const int WS_EX_NOINHERITLAYOUT   = 0x00100000;
			/// <summary></summary>
			public const int WS_EX_LAYOUTRTL         = 0x00400000;
			/// <summary></summary>
			public const int WS_EX_COMPOSITED        = 0x02000000;
			/// <summary></summary>
			public const int WS_EX_NOACTIVATE        = 0x08000000;

			/// <summary>Combined styles as defined in the platform SDK</summary>
			public const int WS_EX_OVERLAPPEDWINDOW  = (WS_EX_WINDOWEDGE | WS_EX_CLIENTEDGE);
			/// <summary></summary>
			public const int WS_EX_PALETTEWINDOW     = (WS_EX_WINDOWEDGE | WS_EX_TOOLWINDOW | WS_EX_TOPMOST);
		}
#endregion

		/// <summary>
		/// WM_NCHITTEST and MOUSEHOOKSTRUCT Mouse Position Codes
		/// </summary>
	public class NCHitTestReturnCodes
	{
		/// <summary></summary>
		public const int HTERROR		= -2;
		/// <summary></summary>
		public const int HTTRANSPARENT	= -1;
		/// <summary></summary>
		public const int HTNOWHERE		= 0;
		/// <summary></summary>
		public const int HTCLIENT		= 1;
		/// <summary></summary>
		public const int HTCAPTION		= 2;
		/// <summary></summary>
		public const int HTSYSMENU		= 3;
		/// <summary></summary>
		public const int HTGROWBOX		= 4;
		/// <summary></summary>
		public const int HTSIZE			= HTGROWBOX;
		/// <summary></summary>
		public const int HTMENU			= 5;
		/// <summary></summary>
		public const int HTHSCROLL		= 6;
		/// <summary></summary>
		public const int HTVSCROLL		= 7;
		/// <summary></summary>
		public const int HTMINBUTTON	= 8;
		/// <summary></summary>
		public const int HTMAXBUTTON	= 9;
		/// <summary></summary>
		public const int HTLEFT			= 10;
		/// <summary></summary>
		public const int HTRIGHT		= 11;
		/// <summary></summary>
		public const int HTTOP			= 12;
		/// <summary></summary>
		public const int HTTOPLEFT		= 13;
		/// <summary></summary>
		public const int HTTOPRIGHT		= 14;
		/// <summary></summary>
		public const int HTBOTTOM		= 15;
		/// <summary></summary>
		public const int HTBOTTOMLEFT	= 16;
		/// <summary></summary>
		public const int HTBOTTOMRIGHT	= 17;
		/// <summary></summary>
		public const int HTBORDER		= 18;
		/// <summary></summary>
		public const int HTREDUCE		= HTMINBUTTON;
		/// <summary></summary>
		public const int HTZOOM			= HTMAXBUTTON;
		/// <summary></summary>
		public const int HTSIZEFIRST	= HTLEFT;
		/// <summary></summary>
		public const int HTSIZELAST		= HTBOTTOMRIGHT;
		/// <summary></summary>
		public const int HTOBJECT		= 19;
		/// <summary></summary>
		public const int HTCLOSE		= 20;
		/// <summary></summary>
		public const int HTHELP			= 21;
	}
	
}
